use polars::prelude::*;
use anyhow::{anyhow, Result};
use polars::frame::DataFrame;
use crate::gen01::utils::myround;

pub fn generate_settlement(
    staff_df: &DataFrame,  // 员工明细数据
    work_data: &DataFrame,  // 工作内容数据
    project_name: &str,  // 项目名称
    file_path: &str,  // 文件路径
) -> Result<()> {
    // 实现具体的结算单生成逻辑
    println!("正在生成结算单：{}", project_name);
    // 查看 staff_df 类型
    // 1. 解析项目名称和日期
    let (pjname, ymdate) = parse_project_name(project_name)?;
    let project_full_name = format!("{}@@@{}", pjname, ymdate);
    println!("项目名称：{}", project_full_name);
    println!("日期：{}", ymdate);

    // 定额服务
    let ration_money = staff_df
        .column("定额服务")?
        .f64()?
        .sum()
        .ok_or_else(|| anyhow!("无法计算 \"定额服务\" 列的合计"))?;

    println!("{:?}", staff_df.column("人员类别（甲、乙、丙、丁）"));
    // 过滤事务数据
    // let shiwu_df = staff_df
    //     .lazy()
    //     .filter(
    //         col("人员类别（甲、乙、丙、丁）")
    //             .str()
    //             .contains(lit("乙")) // 必须用lit包裹字符串
    //             .not()
    //     )
    //     .collect()?; // collect()执行查询
    // println!("{:?}", shiwu_df);

    // // 计算事务总和
    // let shiwutotalmoney = shiwu_df
    //     .column("应发合计")?
    //     .f64()?
    //     .sum()
    //     .ok_or_else(|| anyhow!("无法计算 \"应发合计\" 列的合计"))?
    //     .map(myround)
    //     .unwrap_or(0.0);


    // // 过滤业务数据
    // let yewu_df = staff_df
    //     .lazy()
    //     .filter(col("人员类别（甲、乙、丙、丁）").str().contains("乙"))
    //     .collect()?;
    // 
    // // 计算业务总和
    // let yewutotalmoney = yewu_df
    //     .column("应发合计")?
    //     .f64()?
    //     .sum()
    //     .ok_or_else(|| anyhow!("无法计算 \"应发合计\" 列的合计"))?
    //     .map(myround)
    //     .unwrap_or(0.0);

    Ok(())
}


fn parse_project_name(pname: &str) -> Result<(String, String)> {
    let base = &pname[..pname.len()-8];
    let suffix = if base.ends_with("项目") {
        base.to_string()
    } else {
        format!("{}项目", base)
    };

    let year = &pname[pname.len()-7..pname.len()-5];
    let month = &pname[pname.len()-5..pname.len()-3];
    let ymdate = format!("20{} 年 {} 月", year, month);

    Ok((suffix, ymdate))
}